package datamodule;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import util.FString;
import conexao.Connect;

public class FornecedorDAO {


	private DBuserVO userVO;

	public FornecedorDAO( DBuserVO userVO){
		this.userVO = userVO;
	}
	
	//Inserir Fornecedor
	public int inserir(FornecedorVO VOfcd) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmtInsert = con.prepareStatement(
				" INSERT INTO fornecedor(for_Cod_For, for_Nome, for_Endereco, " +
				" cid_Cod_Cidade, for_UF, for_CEP, for_Fone, for_Celular, for_E_Mail, " +
				" for_CPF_CNPJ, for_Ramo_Atividade, for_Ativo) "+ 
				" VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ");
		pstmtInsert.setString(1, VOfcd.getFor_Cod_For());			
		pstmtInsert.setString(2, VOfcd.getFor_Nome());
		pstmtInsert.setString(3, VOfcd.getFor_Endereco());
		pstmtInsert.setString(4, VOfcd.getCid_Cod_Cidade());
		pstmtInsert.setString(5, VOfcd.getFor_UF());
		pstmtInsert.setString(6, VOfcd.getFor_CEP());
		pstmtInsert.setString(7, VOfcd.getFor_Fone());
		pstmtInsert.setString(8, VOfcd.getFor_Celular());
		pstmtInsert.setString(9, VOfcd.getFor_E_Mail());
		pstmtInsert.setString(10,VOfcd.getFor_CPF_CNPJ());
		pstmtInsert.setString(11,VOfcd.getFor_Ramo_Atividade());
		pstmtInsert.setString(12,VOfcd.getFor_Ativo());
		int reg = pstmtInsert.executeUpdate();	
		con.close();
		return reg;
	}

	//Alterar Fornecedor
	public int alterar(FornecedorVO VOfcd) throws ClassNotFoundException, SQLException {
		Connection con = Connect.getConnection(userVO);
		String virgula = "";
		StringBuffer sql = new StringBuffer(" UPDATE fornecedor SET ");

		if (!VOfcd.getFor_Cod_For().equals(FString.ignorar)) {
			sql.append(virgula+" for_Cod_For = '"+VOfcd.getFor_Cod_For()+"' ");
			virgula = ",";
		}
		
		if (!VOfcd.getFor_Nome().equals(FString.ignorar)) {
			sql.append(virgula+" for_Nome = '"+VOfcd.getFor_Nome()+"' ");
			virgula = ",";
		}
		
		if (!VOfcd.getFor_Endereco().equals(FString.ignorar)) {
			sql.append(virgula+" for_Endereco = '"+VOfcd.getFor_Endereco()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getCid_Cod_Cidade().equals(FString.ignorar)) {
			sql.append(virgula+" cid_Cod_Cidade = '"+VOfcd.getCid_Cod_Cidade()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_UF().equals(FString.ignorar)) {
			sql.append(virgula+" for_UF = '"+VOfcd.getFor_UF()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_CEP().equals(FString.ignorar)) {
			sql.append(virgula+" for_CEP = '"+VOfcd.getFor_CEP()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_Fone().equals(FString.ignorar)) {
			sql.append(virgula+" for_Fone = '"+VOfcd.getFor_Fone()+"' ");
			virgula = ",";
		}	
		if (!VOfcd.getFor_Celular().equals(FString.ignorar)) {
			sql.append(virgula+" for_Celular = '"+VOfcd.getFor_Celular()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_E_Mail().equals(FString.ignorar)) {
			sql.append(virgula+" for_E_Mail = '"+VOfcd.getFor_E_Mail()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_CPF_CNPJ().equals(FString.ignorar)) {
			sql.append(virgula+" for_CPF_CNPJ = '"+VOfcd.getFor_CPF_CNPJ()+"' ");
			virgula = ",";
		}
		if (!VOfcd.getFor_Ramo_Atividade().equals(FString.ignorar)) {
			sql.append(virgula+" for_Ramo_Atividade = '"+VOfcd.getFor_Ramo_Atividade()+"' ");
			virgula = ",";
		}
    	if (!VOfcd.getFor_Ativo().equals(FString.ignorar)) {
		sql.append(virgula+" for_Ativo = '"+VOfcd.getFor_Ativo()+"' ");
		virgula = ",";
    	}
		
		sql.append(" WHERE for_Cod_For = '"+VOfcd.getFor_Cod_For()+"' ");
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0, sql.length()));
		//System.out.println(pstmt);
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}	
	
	// Deletar Fornecedor
	public int deletar(FornecedorVO VOfcd) throws ClassNotFoundException, SQLException {		
		Connection con = Connect.getConnection(userVO);
		PreparedStatement pstmt = con.prepareStatement(
		"DELETE FROM fornecedor WHERE for_Cod_For = ?");
		pstmt.setString(1, VOfcd.getFor_Cod_For());
		int registrosAfetados = pstmt.executeUpdate();
		con.close();
		return registrosAfetados;
	}

	//Pesquisar Fornecedor
	public FornecedorVO pesquisar(FornecedorVO VOfcd) throws ClassNotFoundException, SQLException {				
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM fornecedor  Where for_Cod_For <> '' ");
		
		if (!VOfcd.getFor_Cod_For().equals(FString.ignorar)) {
			sql.append(" AND UPPER(for_Cod_For)= '"+VOfcd.getFor_Cod_For()+"' ");			
		}		
		if (!VOfcd.getFor_Nome().equals(FString.ignorar)) {
			sql.append(" AND UPPER(for_Nome) LIKE UPPER('"+VOfcd.getFor_Nome()+"%"+"')"); 			
		}
	
		//System.out.println(sql);
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {

			VOfcd = new FornecedorVO();
			VOfcd.setFor_Cod_For        ( rs.getString("for_Cod_For"));
			VOfcd.setFor_Nome           ( rs.getString("for_Nome"));
			VOfcd.setFor_Endereco       ( rs.getString("for_Endereco"));
			VOfcd.setCid_Cod_Cidade     ( rs.getString("cid_Cod_Cidade"));
			VOfcd.setFor_UF             ( rs.getString("for_UF"));
			VOfcd.setFor_CEP            ( rs.getString("for_CEP"));
			VOfcd.setFor_Fone           ( rs.getString("for_Fone"));
			VOfcd.setFor_Celular        ( rs.getString("for_Celular"));
			VOfcd.setFor_E_Mail         ( rs.getString("for_E_Mail"));
			VOfcd.setFor_CPF_CNPJ       ( rs.getString("for_CPF_CNPJ"));
			VOfcd.setFor_Ramo_Atividade ( rs.getString("for_Ramo_Atividade"));
			VOfcd.setFor_Ativo          ( rs.getString("for_Ativo"));

		}else {
			VOfcd = null;
		}
		pstmt.close();
		rs.close();
		con.close();
		return VOfcd;
	}

	public ArrayList<FornecedorVO> geral(FornecedorVO VOfcd) throws SQLException, ClassNotFoundException {		
		ArrayList<FornecedorVO> lista = null;
		Connection con = Connect.getConnection(userVO);
		StringBuffer sql = new StringBuffer("SELECT * FROM fornecedor Where for_Cod_For <> ''  ");
		if (!VOfcd.getFor_Cod_For().equals(FString.ignorar)) {
			sql.append(" AND UPPER(for_Cod_For) = ('"+VOfcd.getFor_Cod_For()+"')");
		}
		if (!VOfcd.getFor_Nome().equals(FString.ignorar)) {
			sql.append(" AND UPPER(for_Nome) LIKE UPPER('"+VOfcd.getFor_Nome()+"%"+"')");
		}
		
		if (!VOfcd.getOrdem().equals(FString.ignorar)) {
			sql.append(" ORDER BY "+VOfcd.getOrdem());
		}
		if (!VOfcd.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOfcd.getLimit());
		}
		
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));		
		ResultSet rs = pstmt.executeQuery();
		if (rs.next()) {
			lista = new ArrayList<FornecedorVO>();
			do {
				FornecedorVO fcd = new FornecedorVO();
				fcd.setFor_Cod_For        ( rs.getString("for_Cod_For"));
				fcd.setFor_Nome           ( rs.getString("for_Nome"));
				fcd.setFor_Endereco       ( rs.getString("for_Endereco"));
				fcd.setCid_Cod_Cidade     ( rs.getString("cid_Cod_Cidade"));
				fcd.setFor_UF             ( rs.getString("for_UF"));
				fcd.setFor_CEP            ( rs.getString("for_CEP"));
				fcd.setFor_Fone           ( rs.getString("for_Fone"));
				fcd.setFor_Celular        ( rs.getString("for_Celular"));
				fcd.setFor_E_Mail         ( rs.getString("for_E_Mail"));
				fcd.setFor_CPF_CNPJ       ( rs.getString("for_CPF_CNPJ"));
				fcd.setFor_Ramo_Atividade ( rs.getString("for_Ramo_Atividade"));
				fcd.setFor_Ativo          ( rs.getString("for_Ativo"));

				lista.add(fcd);
			}
			while (rs.next());			
		}
		pstmt.close();
		rs.close();
		con.close();
		return lista;
	}
	
	public ResultSet listagem(FornecedorVO VOfcd, Connection con) throws SQLException, ClassNotFoundException {		

		StringBuffer sql = new StringBuffer("SELECT "+
		" fornecedor.`for_Cod_For` AS fornecedor_for_Cod_For, "+
	    " fornecedor.`for_Nome` AS fornecedor_for_Nome, "+
		" fornecedor.`for_Endereco` AS fornecedor_for_Endereco, "+
		" fornecedor.`cid_Cod_Cidade` AS fornecedor_cid_Cod_Cidade, "+
		" fornecedor.`for_UF` AS fornecedor_for_UF, "+
		" fornecedor.`for_Cep` AS fornecedor_for_Cep, "+
		" fornecedor.`for_Fone` AS fornecedor_for_Fone, "+
		" fornecedor.`for_Celular` AS fornecedor_for_Celular, "+
		" fornecedor.`for_E_Mail` AS fornecedor_for_E_Mail, "+
		" fornecedor.`for_CPF_CNPJ` AS fornecedor_for_CPF_CNPJ, "+
		" fornecedor.`for_Ramo_Atividade` AS fornecedor_for_Ramo_Atividade, "+
		" fornecedor.`for_Ativo` AS fornecedor_for_Ativo, "+
		" cidades.`cid_Cod_Cidade` AS cidades_cid_Cod_Cidade, "+
		" cidades.`cid_Descricao` AS cidades_cid_Descricao "+
		" FROM    `cidades` cidades INNER JOIN `fornecedor` fornecedor ON cidades.`cid_Cod_Cidade` = fornecedor.`cid_Cod_Cidade` "+				
		" Where fornecedor.`for_Cod_For` <> '' ");
				
		if (!VOfcd.getFor_Cod_For().equals(FString.ignorar) && !VOfcd.getFor_Cod_For().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`for_Cod_For`) = '"+VOfcd.getFor_Cod_For()+"' ");			
		}		
		if (!VOfcd.getFor_Nome().equals(FString.ignorar) && !VOfcd.getFor_Nome().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`for_Nome`) LIKE UPPER('"+VOfcd.getFor_Nome()+"%"+"')"); 			
		}

		if (!VOfcd.getFor_UF().equals(FString.ignorar) && !VOfcd.getFor_UF().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`for_UF`) = ('"+VOfcd.getFor_UF()+"')");
		}

		if (!VOfcd.getCid_Cod_Cidade().equals(FString.ignorar) && !VOfcd.getCid_Cod_Cidade().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`cid_Cod_Cidade`) = ('"+VOfcd.getCid_Cod_Cidade()+"')");
		}
	
		if (!VOfcd.getFor_CPF_CNPJ().equals(FString.ignorar) && !VOfcd.getFor_CPF_CNPJ().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`for_CPF_CNPJ`) = '"+VOfcd.getFor_CPF_CNPJ()+"' ");
		}
		
		if (!VOfcd.getFor_Ramo_Atividade().equals(FString.ignorar) && !VOfcd.getFor_Ramo_Atividade().isEmpty()) {
			sql.append(" AND UPPER(fornecedor.`for_Ramo_Atividade`) LIKE UPPER('"+VOfcd.getFor_Ramo_Atividade()+"%"+"')");
		}
		
 		
		if (!VOfcd.getOrdem().equals(FString.ignorar) && !VOfcd.getOrdem().isEmpty()) {
			sql.append(" ORDER BY "+VOfcd.getOrdem());
		}
		
		if (!VOfcd.getLimit().equals(FString.ignorar)) {
			sql.append(" LIMIT "+VOfcd.getLimit());
		}
		
		PreparedStatement pstmt = con.prepareStatement(sql.substring(0,sql.length()));
		System.out.println(pstmt);
		ResultSet rs = pstmt.executeQuery();
		return rs;
	}	
	
}